package com.gdones.bootserver.bus.role.controller;


import com.gdones.bootserver.bus.role.dto.Role;
import com.gdones.bootserver.bus.role.dto.RoleMenuUpdateDto;
import com.gdones.bootserver.bus.role.service.IRoleService;
import com.gdones.common.core.annotations.MySysLog;
import com.gdones.common.core.annotations.MySysLogOpration;
import com.gdones.common.core.dto.MyPageBand;
import com.gdones.common.core.dto.MyResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 *
 * 角色管理模块
 * @author GaoJingBo
 * @since 2023-03-28
 */
@RestController
@RequestMapping("/sys/role")
@Slf4j
@Api(tags = "角色管理接口")
public class RoleController {

    @Resource(name = "roleServiceImpl")
    private IRoleService roleService;

    /**
     * 角色管理：分页查询角色信息
     * @param role 查询信息
     * @param pager 分页信息
     * @return
     */
    @GetMapping("/pages")
    @ApiOperation("分页查询角色信息")
    @MySysLog(modelName="角色管理",methodDesc = "分页查询角色信息",methodType = MySysLogOpration.GET)
    public MyResult getRolePages(Role role, MyPageBand pager){

        log.info("--- 角色管理：分页查询角色信息-》页："+pager.getPage()+"分页："+pager.getSize());

        MyResult result = new MyResult();

        try{

            result = roleService.getPage(role,pager);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("分页查询角色信息系统异常！");
        }

        return result;
    }

    /**
     * 删除角色信息（可支持批量删除）
     * @param ids 删除的角色id，以逗号分隔
     * @return
     */
    @DeleteMapping("/deletes")
    @ApiOperation("删除角色信息（可支持批量删除）")
    @MySysLog(modelName="角色管理",methodDesc = "删除角色信息（可支持批量删除）",methodType = MySysLogOpration.DELETE)
    public MyResult deletes(String ids){
        log.info("--- 角色管理：删除角色信息");

        MyResult result = new MyResult();

        try{

            result = roleService.deletes(ids);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("删除角色信息系统异常！");
        }

        return result;
    }

    /**
     * 角色管理：更新角色信息
     * @param role 更新角色信息
     * @return
     */
    @PutMapping("/update")
    @ApiOperation("更新角色信息")
    @MySysLog(modelName="角色管理",methodDesc = "更新角色信息",methodType = MySysLogOpration.PUT)
    public MyResult updateRole(@RequestBody Role role){
        log.info("--- 角色管理：更新角色信息");

        MyResult result = new MyResult();

        try{

            result = roleService.updateRole(role);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("更新角色信息系统异常！");
        }

        return result;
    }

    /**
     * 角色管理：添加角色信息
     * @param role 添加的信息
     * @return
     */
    @PostMapping("/add")
    @ApiOperation("添加角色信息")
    @MySysLog(modelName="角色管理",methodDesc = "添加角色信息",methodType = MySysLogOpration.POST)
    public MyResult addRole(@RequestBody Role role){
        log.info("--- 角色管理：添加角色信息");

        MyResult result = new MyResult();

        try{

            result = roleService.addRole(role);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("添加角色信息系统异常！");
        }

        return result;
    }

    /**
     * 角色管理：获取角色信息通过id
     * @param roleID 角色id
     * @return
     */
    @GetMapping("/getByID")
    @ApiOperation("获取角色信息通过id")
    @MySysLog(modelName="角色管理",methodDesc = "获取角色信息通过id",methodType = MySysLogOpration.GET)
    public MyResult getRoleByID(String roleID){
        log.info("--- 角色管理：获取角色信息通过id");

        MyResult result = new MyResult();

        try{

            result = roleService.getRoleByID(roleID);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("获取角色信息系统异常！");
        }

        return result;
    }

    /**
     * 角色管理：修改菜单权限数据
     * @return
     */
    @PostMapping("/updateMenuRoles")
    @ApiOperation("授权角色菜单")
    @MySysLog(modelName="角色管理",methodDesc = "授权角色菜单",methodType = MySysLogOpration.POST)
    public MyResult updateMenuRoles(@RequestBody RoleMenuUpdateDto roleMenuUpdateDto){
        log.info("--- 角色管理：修改菜单权限数据");

        MyResult result = new MyResult();

        try{

            result = roleService.updateMenuRoles(roleMenuUpdateDto);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("获取角色信息系统异常！");
        }

        return result;
    }

    /**
     * 角色管理：通过权限id获取菜单权限数据
     * @param roleID
     * @return
     */
    @GetMapping("/getRoleMenuListByRoleID")
    @ApiOperation("通过权限id获取菜单权限数据")
    @MySysLog(modelName="角色管理",methodDesc = "通过权限id获取菜单权限数据",methodType = MySysLogOpration.GET)
    public MyResult getRoleMenuListByRoleID(String roleID){
        log.info("--- 角色管理：通过权限id获取菜单权限数据");

        MyResult result = new MyResult();

        try{

            result = roleService.getRoleMenuListByRoleID(roleID);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("获取角色信息系统异常！");
        }

        return result;
    }

}
